#include <iostream>
using namespace std;
int rexp(string &s, int l, int r) {
  // 1. s -> maxlen
  // 2. not | () -> len
  // 3. () -> left center right ,    | -> left, right
  // if (s.find(')') == string::npos && s.find('|') != string::npos) return s.length();

  int cnt = 0;
  // |
  for (int i = l; i <= r; i++) {
    if (s[i] == '(') cnt++;
    if (s[i] == ')') cnt--;
    if (s[i] == '|' && cnt == 0) {
      return max(rexp(s, l, i - 1), rexp(s, i + 1, r));
    }
  }
  // ()
  if (int left = s.find('(', l); left != string::npos && left <= r) {
    int cnt = 1;
    for (int i = left + 1;; i++) {
      if (s[i] == '(') cnt++;
      if (s[i] == ')') {
        cnt--;
        if (cnt == 0) {
          return rexp(s, l, left - 1) + rexp(s, left + 1, i - 1) +
                 rexp(s, i + 1, r);
        }
      }
    }
  }
  // base
  return r - l + 1;
}
int rexp(string &s, int &i) {
  // 1. 从下标 i 开始，到下一个完整的字符，结果
  // 2. | ()
  // 3. () -> center   ,  | -> right
  int cnt = 0;
  for (; i < s.length(); ++i) {
    if (s[i] == 'a') {
      cnt++;
    } else if (s[i] == '(') {
      cnt += rexp(s, ++i);
    } else if (s[i] == ')') {
      return cnt;
    } else if (s[i] == '|') {
      // left cnt
      // right rexp(s, ++i)
      return max(cnt, rexp(s, ++i));
    }
  }
  return cnt;
}
int rexp() {
  int cnt = 0;
  char ch;
  while (cin >> ch) {
    if (ch == 'a') cnt++;
    if (ch == '(') cnt += rexp();
    if (ch == ')') return cnt;
    if (ch == '|') return max(cnt, rexp());
  }
  return cnt;
}
int main() {
  // string str;
  // cin >> str;
  // // cout << rexp(str, 0, str.length() - 1) << endl;
  // int i = 0;
  // cout << rexp(str, i) << endl;
  cout << rexp() << endl;
}